'''
Description: 文件请求器模块
Author: HowsenFisher
Date: 2021-04-08 17:23:27
LastEditTime: 2021-04-11 00:47:05
LastEditors: liutq
Reference: 
'''
import socket
from Config import conf

class FileRequester:
    '''
    @description: 文件请求器类
    @param  {*}
    @return {*}
    @param {*} self
    @param {*} parent：父对象
    @param {*} dst_ip：目标IP
    @param {*} filepath：目标文件路径
    '''
    def __init__(self,parent,dst_ip,filepath):
        # 父对象
        self.parent = parent
        # 目标IP
        self.dst_ip = dst_ip
        # 目标文件路径
        self.filepath = filepath
        # 建立TCP socket连接
        self.s = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
        # 打印info
        self.parent.newInfoSignal.emit("文件请求器:连接%s"%dst_ip)
        # 设置socket超时时间2s
        self.s.settimeout(2)
        # 尝试连接目标
        try:
            self.s.connect((dst_ip,conf.file_control_port))
        # 若发生超时错误，则证明对方无法连接，即不在线
        except:
            # 打印info
            self.parent.newInfoSignal.emit("文件请求器，被请求方可能不在线")
            return
        # 打印info
        self.parent.newInfoSignal.emit("文件请求器:向%s请求%s"%(dst_ip,filepath))
        # 请求文件
        self.req()
    
    '''
    @description: 请求文件函数
    @param  {*}
    @return {*}
    @param {*} self
    '''
    def req(self):
        # 向目标发送文件请求命令
        self.s.send(("fileReq:%s"%self.filepath).encode("utf-8"))
